﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DTO;
using System.Data;
using System.Data.SqlClient;

namespace DAO
{
    public class VeDAO
    {
        public static List<Ve> Select_All()
        {
            List<Ve> list = new List<Ve>();
            String strSql = "select TenKhachHang,BienSo,TenGhe,TenTuyenDuong,Ngay,vx.TinhTrang ";
            strSql += "from VeXe vx,KhachHang kh,Xe x,Ghe gh,TuyenDuong td ";
            strSql += "where vx.MaXe=x.MaXe and vx.MaKhachHang=kh.MaKhachHang ";
            strSql += "and vx.MaTuyenDuong=td.MaTuyenDuong and vx.MaGhe=gh.MaGhe";

            try
            {
                DataTable dt = SqlDataAccessHelper.ExcuteQuery(strSql);
                foreach (DataRow dr in dt.Rows)
                {
                    Ve emp = new Ve();
                    emp.MaKhachHang = dr["TenKhachHang"].ToString();
                    emp.MaXe = dr["BienSo"].ToString();
                    emp.MaGhe = dr["TenGhe"].ToString();
                    emp.MaTuyenDuong = dr["TenTuyenDuong"].ToString();
                    emp.Ngay = dr["Ngay"].ToString();
                    emp.TinhTrang = dr["TinhTrang"].ToString();
                    list.Add(emp);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return list;
        }

        public static List<Ve> Select_Ve_DatTruoc()
        {
            List<Ve> list = new List<Ve>();
            String strSql = "select vx.GioXuatBen,TenKhachHang,BienSo,TenGhe,TenTuyenDuong,Ngay,vx.TinhTrang,GiaTien,";
            strSql += "vx.MaKhachHang,vx.MaXe,vx.MaGhe,vx.MaTuyenDuong ";
            strSql += "from VeXe vx,KhachHang kh,Xe x,Ghe gh,TuyenDuong td,GiaVe gv ";
            strSql +="where vx.MaXe=x.MaXe and vx.MaKhachHang=kh.MaKhachHang and gv.MaXe=x.MaXe and gv.MaTuyenDuong=td.MaTuyenDuong ";
            strSql += "and vx.MaTuyenDuong=td.MaTuyenDuong and vx.MaGhe=gh.MaGhe and vx.TinhTrang='False' ";

            try
            {
                DataTable dt = SqlDataAccessHelper.ExcuteQuery(strSql);
                foreach (DataRow dr in dt.Rows)
                {
                    Ve emp = new Ve();
                    emp.MaKhachHang = dr["MaKhachHang"].ToString();
                    emp.TenKhachHang = dr["TenKhachHang"].ToString();
                    emp.MaXe = dr["MaXe"].ToString();
                    emp.BienSo = dr["BienSo"].ToString();
                    emp.MaGhe = dr["MaGhe"].ToString();
                    emp.SoGhe = dr["TenGhe"].ToString();
                    emp.MaTuyenDuong = dr["MaTuyenDuong"].ToString();
                    emp.TuyenDuong = dr["TenTuyenDuong"].ToString();
                    emp.Ngay = dr["Ngay"].ToString();
                    emp.TinhTrang = dr["TinhTrang"].ToString();
                    emp.GiaTien = dr["GiaTien"].ToString();
                    emp.GioXuatBen = dr["GioXuatBen"].ToString();
                    list.Add(emp);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return list;
        }

        public static bool Insert(Ve emp)
        {
            bool result = false;
            string strSql = "insert into VeXe ";
            strSql += "values(@MaKhachHang,@MaXe,@MaGhe,@MaTuyenDuong,@Ngay,@GioXuatBen,@TinhTrang)";

            try
            {
                List<SqlParameter> sqlPara = new List<SqlParameter>();
                sqlPara.Add(new SqlParameter("@MaKhachHang", emp.MaKhachHang));
                sqlPara.Add(new SqlParameter("@MaXe", emp.MaXe));
                sqlPara.Add(new SqlParameter("@MaGhe", emp.MaGhe));
                sqlPara.Add(new SqlParameter("@MaTuyenDuong", emp.MaTuyenDuong));
                sqlPara.Add(new SqlParameter("@Ngay", emp.Ngay));
                sqlPara.Add(new SqlParameter("@GioXuatBen", emp.GioXuatBen));
                sqlPara.Add(new SqlParameter("@TinhTrang", emp.TinhTrang));

                int n = SqlDataAccessHelper.ExcuteNoneQuery(strSql, sqlPara);
                if (n == 1)
                    result = true;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return result;
        }

        public static bool ThanhToan(String MaKH,String MaXe,String MaGhe,String MaTD,String Ngay)
        {
            bool result = false;
            string strSql = "update VeXe set TinhTrang='True' where MaKhachHang=@MaKH and MaXe=@MaXe and MaGhe=@MaGhe and MaTuyenDuong=@MaTD and DateDiff(DAY,Ngay,@Ngay)=0";
            
            try
            {
                List<SqlParameter> sqlPara = new List<SqlParameter>();
                sqlPara.Add(new SqlParameter("@MaKH", MaKH));
                sqlPara.Add(new SqlParameter("@MaXe", MaXe));
                sqlPara.Add(new SqlParameter("@MaGhe", MaGhe));
                sqlPara.Add(new SqlParameter("@MaTD", MaTD));
                sqlPara.Add(new SqlParameter("@Ngay", Ngay));

                int n = SqlDataAccessHelper.ExcuteNoneQuery(strSql, sqlPara);
                if (n == 1)
                    result = true;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return result;
        }

        public static bool Update(Ve ve_cu,Ve ve_moi)
        {
            bool result = false;
            string strSql = "update vexe set MaXe=@MaXeMoi,MaGhe=@MaGheMoi,MaTuyenDuong=@MaTDMoi,Ngay=@NgayMoi,GioXuatBen=@GioXBmoi ";
            strSql += "where MaKhachHang=@MaKH and MaXe=@MaXeCu and MaGhe=@MaGheCu and MaTuyenDuong=@MaTDCu and Ngay=@Ngay and GioXuatBen=@GioXBCu";

            try
            {
                List<SqlParameter> sqlPara = new List<SqlParameter>();
                sqlPara.Add(new SqlParameter("@MaKH", ve_cu.MaKhachHang));
                sqlPara.Add(new SqlParameter("@MaXeCu", ve_cu.MaXe));
                sqlPara.Add(new SqlParameter("@MaGheCu", ve_cu.MaGhe));
                sqlPara.Add(new SqlParameter("@MaTDCu", ve_cu.MaTuyenDuong));
                sqlPara.Add(new SqlParameter("@GioXBCu", ve_cu.GioXuatBen));
                sqlPara.Add(new SqlParameter("@Ngay", ve_cu.Ngay));

                sqlPara.Add(new SqlParameter("@MaXeMoi", ve_moi.MaXe));
                sqlPara.Add(new SqlParameter("@MaGheMoi", ve_moi.MaGhe));
                sqlPara.Add(new SqlParameter("@MaTDMoi", ve_moi.MaTuyenDuong));
                sqlPara.Add(new SqlParameter("@GioXBMoi", ve_moi.GioXuatBen));
                sqlPara.Add(new SqlParameter("@NgayMoi", ve_moi.Ngay));

                int n = SqlDataAccessHelper.ExcuteNoneQuery(strSql, sqlPara);
                if (n == 1)
                    result = true;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return result;
        }

        public static bool Delete(String MaKH, String MaXe, String MaGhe, String MaTD, String Ngay)
        {
            bool result = false;
            string strSql = "delete from VeXe where MaKhachHang=@MaKH and MaXe=@MaXe and MaGhe=@MaGhe and MaTuyenDuong=@MaTD and Ngay=@Ngay";

            try
            {
                List<SqlParameter> sqlPara = new List<SqlParameter>();
                sqlPara.Add(new SqlParameter("@MaKH", MaKH));
                sqlPara.Add(new SqlParameter("@MaXe", MaXe));
                sqlPara.Add(new SqlParameter("@MaGhe", MaGhe));
                sqlPara.Add(new SqlParameter("@MaTD", MaTD));
                sqlPara.Add(new SqlParameter("@Ngay", Ngay));

                int n = SqlDataAccessHelper.ExcuteNoneQuery(strSql, sqlPara);
                if (n == 1)
                    result = true;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return result;
        }
    }
}
